//
//  CZdetailController.swift
//  GZWeibo666
//
//  Created by Yuan on 15/12/1.
//  Copyright © 2015年 itcast. All rights reserved.
//

import UIKit

import SVProgressHUD
enum CZbottomViewBtnType : String {
    case bottomViewForwardBtn = "转发"
    case bottomViewCommentBtn = "评论"
}
//系统默认重用标示
let DefaultReuseIdentifier = "Default"
//评论组
let CommentReuseIdentifier = "CommentReuseIdentifier"
//菊花控件
let loadingReuseIdentifier = "loadingReuseIdentifier"
//底部控件高度
let tabBarViewHeight : CGFloat = 50
class CZdetailController: UIViewController,UITableViewDataSource,UITableViewDelegate {
    //底部控件
    private var tabBarView = CZDetailTabBar()
    private var bottomView: UIView = UIView()
    //tableView
    private var tableView : UITableView = {
        let table = UITableView(frame: CGRectZero, style: UITableViewStyle.Grouped)
        return table
    }()
    //模型
    var statue : CZStatus?
    
    //评论模型组
    var commList = [CZComment]()
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //设置代理
        tabBarView.delegate = self
        
        view.backgroundColor = UIColor(white: 0.8, alpha: 1)
        //注册
        //普通微博
        tableView.registerClass(CZStatusNormalCell.self, forCellReuseIdentifier: CZStatusReuseIdentifier.NormalCell.rawValue)
        //转发微博
        tableView.registerClass(CZStatusForwardCell.self, forCellReuseIdentifier: CZStatusReuseIdentifier.ForwardCell.rawValue)
        //系统自带
        tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: DefaultReuseIdentifier)
        //评论组cell
        tableView.registerClass(CZCommentCell.self, forCellReuseIdentifier: CommentReuseIdentifier)
        //菊花
        tableView.registerClass(CZloadingView.self, forCellReuseIdentifier: loadingReuseIdentifier)
        
        
        
        //准备控件
        prepareTableView()
        
        // 使用 SVPullToRefresh 来上拉加载更多数据
        tableView.addInfiniteScrollingWithActionHandler { () -> Void in
            print("加载更多数据")
            self.upLoadMoreComment()
        }

    }

    func prepareTableView(){
        //添加控件
        view.addSubview(tableView)
        view.addSubview(tabBarView)
        //设置代理
        tableView.dataSource = self
        tableView.delegate = self
        //tableView约束
        tableView.ff_AlignInner(type: ff_AlignType.TopLeft, referView: view, size: CGSize(width: UIScreen.mainScreen().bounds.width, height: UIScreen.mainScreen().bounds.height - tabBarViewHeight + 25), offset: CGPoint(x: 0, y: -25))
        //底部约束
        tabBarView.ff_AlignVertical(type: ff_AlignType.BottomLeft, referView: tableView, size: CGSize(width: UIScreen.mainScreen().bounds.width, height: tabBarViewHeight))
    
        
    }

    //MARK: - 返回两组
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 2
    }
    //每组显示多少行
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if section == 0 {
            return 1
        }else {
            if commList.count == 0 {
                return 1
            }else{
                return commList.count
            }
        }
    }
    //MARK: - 选中时的效果
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        //取消选中效果
        tableView.deselectRowAtIndexPath(indexPath, animated: true)
        
    }
    //MARK: - 每组显示
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        if indexPath.section == 0 {
            // 获得模型,模型最清楚要显示什么样的cell
            let status = statue
            
            let cell = tableView.dequeueReusableCellWithIdentifier(status!.cellId()) as! CZStatusCell
            if status?.cellId() == CZStatusReuseIdentifier.ForwardCell.rawValue {
                let forward = cell as! CZStatusForwardCell
                forward.delegate = self
            }
            // 给cell设置模型
            cell.status = status
            //隐藏顶部
//            cell.bottomViewHeightCons?.constant = 0
            cell.topView.separatorViewCons?.constant = 0
            cell.bottomView.hidden = true
            return cell
        }else {
            
            
            if isFirst == true{
//                //第一次进来
                if isload == true {//是否点击了评论按钮
                    //如果点击了就切换到loadingView
                    let cell = tableView.dequeueReusableCellWithIdentifier(loadingReuseIdentifier) as! CZloadingView
                    return cell
                }else {//如果没有点击就用系统默认的cell
                    let cell = tableView.dequeueReusableCellWithIdentifier(DefaultReuseIdentifier)
                    cell?.textLabel?.text = "点击评论加载更多"
                    return cell!
                }
            }else{//不是第一次进来
                //获取模型
                let comment = commList[indexPath.row]
                let cell = tableView.dequeueReusableCellWithIdentifier(CommentReuseIdentifier) as! CZCommentCell
                cell.comment = comment
                return cell
            }
            
        }
    }
    var isFirst : Bool = true
    var isload : Bool = false
    //MARK: - 开始加载评论数据
    func loadMoreComment() {
        print("开始加载评论数据")
        let since_id = commList.first?.id ?? 0
        
        CZStatus.loadCommentList(since_id, max_id: 0, id: (statue?.id)!) { (comments, error) -> () in
            //关闭菊花cell
            
            //判断是否出错
            if error != nil {
                SVProgressHUD.showErrorWithStatus("网络不给力")
                return
            }
            
            let count = comments!.count ?? 0
            
            if count == 0 {
                
                if self.commList.count != 0 {
                    //没有评论
                    SVProgressHUD.showErrorWithStatus("没有更多的新评论,请尝试上拉刷新吧")
                    self.isload = false
                    self.tableView.reloadData()
                    return
                }
                else {
                    //没有评论
                    SVProgressHUD.showErrorWithStatus("没有人评论这条微博哦,快来抢沙发哦")
                    self.isload = false
                    self.tableView.reloadData()
                    return
                }
                
                
            }
//            SVProgressHUD.showSuccessWithStatus("加载了\(comments?.count)条数据")
            //有评论数据
            //设置不是第一次
            self.isFirst = false
            
            if since_id > 0 {
                //点击刷新,显示加载了多少数据
                print("加载了\(count)条")
                self.commList = comments! + self.commList
            }else{
                //第一次加载
                self.commList = comments!
               
            }
            //刷新第二组
            self.tableView.reloadData()
            
        }
    }
    //MARK: - 上拉刷新
    func upLoadMoreComment() {
        // 获取max_id
        let max_id = commList.last?.id ?? 0
        
        CZStatus.loadCommentList(0, max_id: max_id, id: (statue?.id)!) { (comments, error) -> () in
            // 加载完数据,结束上拉加载更多数据,让菊花停止旋转
            self.tableView.infiniteScrollingView.stopAnimating()
            
            let count = comments?.count ?? 0
            
            if count == 0 {
                print("没有加载到更多的数据")
                SVProgressHUD.showErrorWithStatus("没有加载到更多的评论")
                return
            }
            
            // 拼接数据
            // 总的数据 = 现有数据 + 获取到的更多数据
            self.commList = self.commList + comments!
            print("上拉加载评论完成,总共有: \(self.commList.count) 条数据")
            //设置不是第一次
            self.isFirst = false
            //刷新列表
            self.tableView.reloadData()
        }

    }
    //MARK: - 第二组头部组件
    private lazy var commentTopView : CZCommentTopView = {
        let view = CZCommentTopView(comment_count: self.statue!.comments_count)
        view.frame = CGRectMake(0, 0, 375, 100)
        view.delegate = self
        return view
    }()
    //MARK: - 设置第二组顶部View
    func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        if section == 1 {
            return commentTopView
        }else{
            return nil
        }
    }
    func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        if section == 1 {//设置高度
            return 50
        }
        return 0
    }
    //MARK: - 每行的高度
    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        if indexPath.section == 0 {
            // 先看看有没有缓存的行高,如果有缓存行高,直接拿来用,没有的话,在计算,并缓存起来
            // 获取对应的模型
            let status = statue!
            let cell = tableView.dequeueReusableCellWithIdentifier(status.cellId()) as! CZStatusCell
            if status.rowHeight != nil {
                return status.rowHeight! - 44
            }
            // 能到下面来,说明没有缓存的行
            // 获取cell, 计算行高,并不会显示出来
//            let cell = tableView.dequeueReusableCellWithIdentifier(status.cellId()) as! CZStatusCell
            // cell计算行高
            let rowHeight = cell.rowHeight(status)
            // 缓存行高
            status.rowHeight = rowHeight
            // 返回行高
            return rowHeight - 44
        }else {
            // 先看看有没有缓存的行高,如果有缓存行高,直接拿来用,没有的话,在计算,并缓存起来
            // 获取对应的模型
            if commList.count == 0 {
                return 100
            }else{
                let comment = commList[indexPath.row]
                
                if comment.rowHeight != nil {
                    return comment.rowHeight!
                }
                
                // 能到下面来,说明没有缓存的行高
                
                // 获取cell, 计算行高,并不会显示出来
                let cell = tableView.dequeueReusableCellWithIdentifier(CommentReuseIdentifier) as! CZCommentCell
                
                // cell计算行高
                let rowHeight = cell.rowHeight(comment)
                
                // 缓存行高
                comment.rowHeight = rowHeight
                
                // 返回行高
                return rowHeight
            }
            
        }
    }
}
//MARK: - 底部按钮的点击
extension CZdetailController: DetailTabBarDelegate {

    func forwardButtonClickk(){
        let commentVC = CZCommentViewController()
        //设置模型
        commentVC.statue = self.statue
        //设置类型
        commentVC.controllerType = CZbottomViewBtnType.bottomViewForwardBtn.rawValue
        presentViewController(UINavigationController(rootViewController: commentVC), animated: true, completion: nil)
//        self.hidesBottomBarWhenPushed = true

    }
    func commentButtonClickk(){
        let commentVC = CZCommentViewController()
        //设置模型
        commentVC.statue = self.statue
        //设置类型
        commentVC.controllerType = CZbottomViewBtnType.bottomViewCommentBtn.rawValue
         presentViewController(UINavigationController(rootViewController: commentVC), animated: true, completion: nil)
    }
}
//MARK: - 转发微博点击跳转代理
extension CZdetailController : statusForwardCellDelegate {
    //跳转
    func statusForwardCellBtnClick(statue: CZStatus) {
        let detailVc = CZdetailController()
        //传入模型
        detailVc.statue = statue
        self.navigationController?.pushViewController(detailVc, animated: true)
    }
}
//MARK: - 评论列表刷新
extension CZdetailController : commenTopViewdelegate {
    //刷新
    func commTopButtonClick() {
        //开出菊花控件
        self.isload = true
        self.tableView.reloadData()
        
        //加载更多评论数据
        self.loadMoreComment()
    }
}
